package composite.gk1;

/**
 * 透明组合模式
 * 1. 建立顶级抽象类，定义通用方法，并且默认不支持操作
 * 2. 新建普通类做叶子节点，重写部分非添加节点方法，不支持添加子节点
 * 3. 建立层级节点，重写全部方法，支持添加叶子节点
 *
 * 缺点：叶子节点获得了不属于它的方法，如addChild，违背了隔离性原则
 */
public class Gk1Test {
    public static void main(String[] args) {
        //各科
        CommonCource 语文 = new CommonCource("语文", "123");
        CommonCource 数学 = new CommonCource("数学", "100");
        CommonCource 英语 = new CommonCource("英语", "103");
        CommonCource 物理 = new CommonCource("物理", "99");
        CommonCource 化学 = new CommonCource("化学", "90");
        CommonCource 生物 = new CommonCource("生物", "88");

        //理综
        LevelCource 理综 = new LevelCource("理综", 2);
        理综.addChild(物理);
        理综.addChild(化学);
        理综.addChild(生物);

        //高考全科
        LevelCource 全科目 = new LevelCource("全科目", 1);
        全科目.addChild(语文);
        全科目.addChild(数学);
        全科目.addChild(英语);
        全科目.addChild(理综);

        全科目.info();
    }

}
